//函数
package main

import "fmt"

//函数存在的意义？
//函数是一段代码的封装，把一段逻辑抽象出来封装到一个函数中，每次用到时直接调用函数名就可以
//s使用函数能够让代码结构更清晰、更简洁
//函数的定义
func sum(x int, y int) (ret int) {
	return x + y
}

//没有返回值
func f1(x int, y int) {
	fmt.Println(x + y)
}

//没有参数没有返回值
func f2() {
	fmt.Println("f2")
}

//没有参数但有返回值的
func f3() int {
	return 3
}

//返回值可以命名也可以不命名
//命名的返回值就相当于在函数中声明一个变量
func f4(x int, y int) (ret int) {
	ret = x + y
	return //使用命名返回值可以return后省略
}

//多个返回值
func f5() (int, string) {
	return 1, "北京"
}

//参数的类型简写(当参数中多个参数的类型一致时，可以将非最后一个参数的类型省略)
func f6(x, y int) int {
	return x + y
}

//可变长参数，必须放在函数参数的最后
func f7(x string, y ...int) {
	fmt.Println(x)
	fmt.Println(y) //y的类型是切片 []int
}

func main() {
	fmt.Println(sum(1, 2))
	f7("下雨", 1, 2, 4, 5, 6, 7)
}
